//
//  DHHomeController.swift
//  Weibo
//
//  Created by Holfioo on 15/8/31.
//  Copyright © 2015年 Holfioo. All rights reserved.
//

import UIKit
import SVProgressHUD

class DHHomeController: DHBaseTVController {
    // 懒加载数据模型
    private lazy var statusListViewModel = DHStatusListViewModel()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // visitorView?.setupViewWith("关注一些人，回这里看看有什么惊喜", imageNage: nil)
        if !DHUserAccountViewModel.sharedUserAccount.userLogin {
            visitorView?.setupViewWith("关注一些人，回这里看看有什么惊喜", imageNage: nil)
            return
        }
        // 接收通知方法
        NSNotificationCenter.defaultCenter().addObserverForName(DHPhotoSelectedNotification, object: nil, queue: nil) { [weak self] (notification) -> Void in
            print(notification)
            
            let vc = DHPhotoBrowerViewController()
            // 通知里的self一定会循环引用。
            self?.presentViewController(vc, animated: true, completion: nil)
        }
        
        // 布局tableView属性
        prepareTableView()
        
        // 加载数据
        loadData()
        
    }
    // 析构函数释放通知接受者
    deinit {
        NSNotificationCenter.defaultCenter().removeObserver(self)
    }
    // 隐藏刷新按钮。不成功！
    override func viewDidDisappear(animated: Bool) {
        refreshControl?.tintColor = UIColor.clearColor()
        super.viewDidDisappear(animated)
    }
    private func prepareTableView() {
        // 自创的 注册两个cell
        tableView.registerClass(DHStatusNormalCell.self, forCellReuseIdentifier: DHStatusCellID)
        // 转发ID
        tableView.registerClass(DHRetweetStatusCell.self, forCellReuseIdentifier: DHStatusRetweetID)
        // 设置行高 , 预估行高
        tableView.estimatedRowHeight = 200
        // tableView.rowHeight = UITableViewAutomaticDimension // 自动计算行高
        // 设置分割线的样式。
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None
        // 下拉刷新控件
        
        refreshControl = DHRefreshControl()
        refreshControl?.addTarget(self, action: "loadData", forControlEvents: UIControlEvents.ValueChanged)
        
        tableView.tableFooterView = pullupView
        
    }
    
    func loadData() {
        // 开始刷新数据
        refreshControl?.beginRefreshing()
        // 取得懒加载数据。
        
        statusListViewModel.loadData(isPullupRefresh: pullupView.isAnimating()).subscribeNext({ (result) -> Void in
            // TODO:
            
            }, error: { (error) -> Void in
                self.stopRefresh()
                printLog(error)
                SVProgressHUD.showErrorWithStatus("您的网络不给力")
            }) { () -> Void in
                // 结束刷新
                self.stopRefresh()
                self.tableView.reloadData()
        }
    }
    private func stopRefresh() {
        self.refreshControl?.endRefreshing()
        // 结束动画
        pullupView.stopAnimating()
    }
    // 设置上拉刷新的视图
    private lazy var pullupView: UIActivityIndicatorView = {
        // 设置为大白格式
        let indicator = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        indicator.color = UIColor.lightGrayColor() // 注意设置的是颜色，不是tintColor
        
        return indicator
    }()
}

extension DHHomeController {
    // dataSource
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.statuses.count
    }
    // 数据源方法。
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let statusViewModel = statusListViewModel.statuses[indexPath.row]
        // 使用DH的Cell
        let cell = tableView.dequeueReusableCellWithIdentifier(statusViewModel.cellID, forIndexPath: indexPath) as! DHStatusCell

        // cell的试图模型 就是 取得的数组
        cell.statusViewModel = statusViewModel
//        printLog(cell.statusViewModel?.status)
        // printLog(cell.statusViewModel.) 
        if (indexPath.row == statusListViewModel.statuses.count - 1) && !pullupView.isAnimating() {
            printLog("上拉刷新中。")
            pullupView.startAnimating()
            // 到最后一个cell的时候执行刷新数据
            loadData()
        }
        return cell
    }
    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        // 取出当前行的视图模型
        let viewModel = statusListViewModel.statuses[indexPath.row]
        // 取出保存的行高。
        if viewModel.rowHeight > 0 {
            return viewModel.rowHeight
        }
        // 获得当前的cell
        let cell = tableView.dequeueReusableCellWithIdentifier(viewModel.cellID) as! DHStatusCell
        // 记录行高
        viewModel.rowHeight = cell.rowHeight(viewModel)
        // 返回
        return viewModel.rowHeight
    }
}